package com.sinya.shoppingmall.widget;

import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.widget.ImageView;

/**
 * @author CoCo
 * @date 2016/1/21.
 */
public class MyImageView extends ImageView {

//    private int mMoveAbleY = 245;   //可以移动的范围，暂时写固定值，这个值是测量后得来。
    private int mMoveAbleY = 200;   //可以移动的范围，暂时写固定值，这个值是测量后得来。
    private int mMoveCountY;    //实际移动的范围


    public MyImageView(Context context) {
        super(context);

    }

    public MyImageView(Context context, AttributeSet attrs) {
        super(context, attrs, 0);
    }

    public MyImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
    }

    //复位操作,在ListView重用时使用
    public void reSet() {
        mMoveCountY = 0;
        scrollTo(0, 0);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

//      这是一段动态计算可滑动距离的代码，但是写在这里貌似有问题，暂时先写固定值。
//		int dh = getDrawable().getBounds().height();
//
//		// 获得ImageView中Image的变换矩阵
//		Matrix m = getImageMatrix();
//		float[] values = new float[10];
//		m.getValues(values);
//
//		// Image在绘制过程中的变换矩阵，从中获得x和y方向的缩放系数
//		// float sx = values[0];
//		float sy = values[4];
//
//		// 计算Image在屏幕上实际绘制的宽高
//		// int cw = (int)(dw * sx);
//		int ch = (int) (dh * sy);
//		mMoveAbleY = (ch - getMeasuredHeight())/2 - 4; // 计算可以滑动的Y距离

    }

    public void setOnYsrcollBy(int y) {
        // 如果y是负数，表示往上滚动；如果y是正数，表示往下滚动。
        mMoveCountY += y; //累计滚动距离
        if (mMoveCountY < 0) {
            if (mMoveCountY < -mMoveAbleY) {
                mMoveCountY = -mMoveAbleY;    //因为来得y可能会超过规定好的移动范围，所以要进行复位
            } else if (mMoveCountY > -mMoveAbleY) {
                scrollBy(0, y); //在范围内，可以进行滚动
            }
        } else if (mMoveCountY > 0) {
            if (mMoveCountY > mMoveAbleY) {
                mMoveCountY = mMoveAbleY;
            } else if (mMoveCountY < mMoveAbleY) {
                scrollBy(0, y);
            }
        }

    }
}
